﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;

namespace GRUPO_4.Persistencia
{
    public class ProfesionDao : IProfesionDAO
    {
        private SqlConnection conexion;

        public ProfesionDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }

        public Profesion CrearProfesion(Profesion profesion)
        {

            String sentencia = "INSERT INTO Profesion VALUES (@codProfesion,@nombreProfesion)";
            conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter codProfesion = new SqlParameter("@codProfesion", System.Data.SqlDbType.Int);
                codProfesion.Value = profesion.codProfesion;
                comando.Parameters.Add(codProfesion);

                SqlParameter nombreProfesion = new SqlParameter("@nombreProfesion", System.Data.SqlDbType.NVarChar);
                nombreProfesion.Value = profesion.nombreProfesion;
                comando.Parameters.Add(nombreProfesion);

                comando.ExecuteNonQuery();

            }


            conexion.Close();
            return this.ObtenerProfesion(profesion.codProfesion);
        }

        public Profesion ObtenerProfesion(int codigo)
        {

            String sentencia = "SELECT * FROM Profesion WHERE codProfesion=@codProfesion";
            conexion.Open();
            Profesion profesion = null;

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter buscador = new SqlParameter("@codProfesion", System.Data.SqlDbType.Int);
                buscador.Value = codigo;
                comando.Parameters.Add(buscador);
                SqlDataReader resultado = comando.ExecuteReader();

                if (resultado.HasRows)
                {
                    resultado.Read();
                    profesion = new Profesion();
                    profesion.codProfesion = (int)resultado["codProfesion"];
                    profesion.nombreProfesion = (String)resultado["nombreProfesion"];

                }
            }

            conexion.Close();
            return profesion;
        }

        public Profesion ModificarProfesion(Profesion profesion)
        {
            conexion.Open();
            String sqlvalores1 = "nombreProfesion='" + profesion.nombreProfesion + "'" +
                                 " WHERE codProfesion=" + profesion.codProfesion;

            String sentencia = "UPDATE Profesion SET " + sqlvalores1;
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerProfesion(profesion.codProfesion);

        }
        public void eliminarProfesion(int codigo)
        {
            String sentencia = "DELETE FROM Profesion where codProfesion=@codProfesion";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter borrador = new SqlParameter("@codProfesion", System.Data.SqlDbType.Int);
                borrador.Value = codigo;
                comando.Parameters.Add(borrador);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }


        public ICollection<Profesion> ListarTodos()
           
        {
            String sentencia = "SELECT * FROM Profesion";
            conexion.Open();
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de Profesion --- Coleccion es un contenedor de objetos de tipo Profesion

            ICollection<Profesion> objColeccionProfesion = new List<Profesion>();

            while (resultado.Read())
            {

                Profesion unaProfesion = new Profesion();

                unaProfesion.codProfesion = (Int32)resultado["codProfesion"];

                unaProfesion.nombreProfesion = (String)resultado["nombreProfesion"];

                objColeccionProfesion.Add(unaProfesion);
                }
            conexion.Close();
            return objColeccionProfesion;

        }
            
      

        public ICollection<Profesion> ListarPorNombreSimilar(string descripcion)
        {
            throw new NotImplementedException();
        }

        public Profesion Crear(Profesion entidad)
        {
            return this.CrearProfesion(entidad);
        }

        public Profesion Obtener(int id)
        {
            return this.ObtenerProfesion(id);
        }

        public Profesion Modificar(Profesion entidad)
        {
            return this.ModificarProfesion(entidad);
        }

        public void Eliminar(Profesion entidad)
        {
            this.eliminarProfesion(entidad.codProfesion);
        }
    }
}